home *** CD-ROM | disk | FTP | other *** search
- Subject: v06i029: Elm mail system (elm), Part04/14
- Newsgroups: mod.sources
- Approved: rs@mirror.UUCP
-
- Submitted by: Dave Taylor <pyramid!hplabs!hpldat!taylor>
- Mod.sources: Volume 6, Issue 29
- Archive-name: elm/Part04
-
- [ This posting is in a different SHAR format because Dave sent me
- an update to one of the files herein and I had to repack. --r$ ]
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line,
- # then unpack it by saving it in a file and typing "sh file".
- # Contents: doc/ hdrs/ doc/Users.guide doc/elm.1 hdrs/curses.h
- # hdrs/defs.h hdrs/elm.h hdrs/headers.h hdrs/help.h hdrs/sysdefs.h
-
- if test ! -d doc
- then
- echo creating directory doc
- mkdir doc
- chmod u=rwx,g=rwx,o=rwx doc
- fi
-
- if test ! -d hdrs
- then
- echo creating directory hdrs
- mkdir hdrs
- chmod u=rwx,g=rwx,o=rwx hdrs
- fi
-
- echo x - doc/Users.guide
- sed 's/^XX//' > "doc/Users.guide" <<'@//E*O*F doc/Users.guide//'
- XX.PH ""
- XX.tm I trust we've run this through tbl first...
- XX\"
- XX\" Users guide to the ELM mail system.
- XX\" format with 'tbl Users.guide | troff -mm > Users.fmtd
- XX\" or something similar.
- XX\" (C) Copyright 1985 Dave Taylor
- XX\"
- XX\" Last update: May 14th, 1986
- XX\"
- XX.PF ""
- XX\" Define the big box macro for troff
- XX.de eb
- XX.sp -1
- XX.nf
- XX\h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
- XX.fi
- XX..
- XX.ds HF 3 3
- XX.ds HP 12 12
- XX.SA 1
- XX.nr Hy 1
- XX.nr Pt 1
- XX.nr Pi 8
- XX.lg 1
- XX.HM 1 1
- XX.rs
- XX.sp 5
- XX.ce 99
- XX.ps 20
- XX\fBElm Users Guide\fR
- XX.sp 2
- XX.ps 12
- XX\fIA painless introduction to electronic mail
- XXusing the \fBElm\fP mailer\fR
- XX.sp 5
- XXDave Taylor
- XX.sp
- XXHewlett-Packard Laboratories
- XX1501 Page Mill Road
- XXPalo Alto CA
- XX94304
- XX.sp
- XXemail: taylor\s10@\s12hplabs or hplabs!taylor
- XX.ps 10
- XX.sp 7
- XX\fBABSTRACT\fR
- XX.ce 0
- XX.sp
- XX.DS CB F
- XXWhile various parts of the Unix system have been
- XXupdated into the `CRT' age (rather than the `teletype')
- XXthe electronic mail systems haven't. This document
- XXpresents the \fIElm\fR mail system which remedies
- XXthis problem. This mailer offers all the features of
- XX\fI/bin/mail\fR, \fImailx\fR, \fIMail\fR, \fIuumail\fR and \fINmail\fR in an
- XXunified and intuitive fashion.
- XX.DE
- XX.sp 5
- XX.ce
- XX.ps 18
- XX\fB\(co\fR\s12 Copyright 1986 by Dave Taylor
- XX.ps 10
- XX.SK
- XX.ce 99
- XX.ps 14
- XX\fBElm Users Guide\fR
- XX.ps 10
- XX.sp
- XX(version 1.1)
- XX.sp 2
- XXDave Taylor
- XXHewlett-Packard Laboratories
- XX1501 Page Mill Road
- XXPalo Alto CA
- XX94304
- XX.sp
- XXemail: taylor@hplabs or hplabs!taylor
- XX.sp 2
- XX\*(DT
- XX.ce 0
- XX.nr P 1
- XX.PH "'Elm Users Guide''Version 1.1'"
- XX.PF "''Page \\\\nP''"
- XX.sp 3
- XX.H 1 "Introduction"
- XX.P 1
- XXThe Unix\v'-.3'\s5TM\s10\v'.3' operating system was originally
- XXwritten on a small PDP machine
- XXto work with teletypewriters. Consequently, all the original software for
- XXthe operating system was written with a `tty' in mind - they were all
- XXline oriented, rather than screen oriented.
- XX.P
- XXGradually this began to change, and, with the addition of the Berkeley
- XX.I vi
- XXvisual shell to the
- XX.I ed
- XXline editor, the trend seemed to be brought to the attention of
- XXUnix systems designers.
- XX.FS " "
- XXHistorical note: shrewd users will recognize this as the old Unix
- XX.lg 0
- XX\fIMsg\fR
- XX.lg 1
- XXmailer. The name was changed to avoid a conflict with an old DEC-20
- XXmailer, and because the new name stands for \fBEL\fRectronic \fBM\fRail,
- XXwhich I think works out better!
- XX.FE
- XX.P
- XXApparently, however, this wasn't enough of a significant event, as
- XX.I vi
- XXand
- XX.I notes
- XXare the only screen oriented software available
- XX(other than games, which are a taboo subject with managers
- XXand the like!). Consequently, after becoming more and more
- XXdisenchanted
- XXwith the existing electronic mail facilities (\fImail\fR
- XXand \fImailx\fR, both of which are essentially line editors) I decided
- XXto write my own!
- XX.P
- XXThis document discusses the
- XX.B Elm
- XXmailer, and includes a set of example screens and a discussion
- XXof configuration (for systems administrators). It is broken
- XXinto three main parts, the \fIElm Users Guide\fR, which you're holding,
- XXthe \fIElm Reference Guide\fR, and the \fIElm Alias Users Guide\fR.
- XX.P
- XXThis guide contains;
- XXthis introduction, a session with the mailer, a
- XXdiscussion of non-interactive uses of \fBElm\fR,
- XXa brief foray into the \fBElm\fR utilities,
- XXand finally, credits and references.
- XX.P
- XXThe \fIElm Reference Guide\fR contains;
- XXa discussion of the \fI.elmrc\fR file,
- XXstarting options of
- XX.B Elm,
- XXoutgoing mail processing,
- XXresponses of various commands,
- XXthe mail archive file,
- XXthe Notes system,
- XXthe Alias system,
- XXsystem aliases etc,
- XXmore on the utilities,
- XXand a section for expert users.
- XX.P
- XXThe \fIElm Alias Users Guide\fR contains;
- XXa further discussion of \fIuser aliases\fR
- XXand \fIgroup aliases\fR, System aliases,
- XXhow to edit and install new aliases,
- XXthe hostname routing database,
- XXthe domain routing database,
- XXand so on.
- XX.P
- XXAny comments or problems with any of the documention or the program
- XXitself are welcome: all installed systems should have an alias
- XXthat will ensure that I receive any mail sent to `elm'.
- XX.sp 2
- XX.H 1 "The Main System"
- XX.P 1
- XXUpon entry to the program, the main screen will be
- XXdisplayed as below;
- XX\" display start, constant width, remember loc for BOX
- XX.DS CB
- XX.mk a)
- XX.mk a)
- XX.ce
- XXMailbox is '/usr/mail/mymail' with 15 messages. [Version 1.1]
-
- XX.TS
- XXr c r l l l l.
- XX -> 1 Apr 3 rob (24) Doing anything tonight?
- XX 2 Apr 5 Joe (154) bug in gammon game
- XX 3 Apr 5 root (13)
- XX 4 Apr 6 root (7) (continuation of previous message)
- XX U 5 Apr 8 decvax!mouse (68) Re: net.music article decvax:495
- XX 6 Apr 13 John Jacobs (194) How can you hate RUSH?
- XX 7 Apr 15 kevin (27) More software requests
- XX N 8 Apr 18 games (26) Hi there
- XX N 9 Apr 18 Don Knuth (354) Your version of TeX...
- XX N 10 Apr 23 Carl Smith (53) (More silly stuff
- XX N 11 Apr 24 jad@hpcnoe (84) Chico? Why go there?
- XX N 12 Apr 24 Larry Fenske (49) hi there...
- XX.TE
- XX.sp
- XX.ce 3
- XX|=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
- XXA)lias, C)hange mailbox, D)elete, E)dit, F)orward, G)roup reply, M)ail,
- XXN)ext, O)ptions, P)rint, R)eply, S)ave, T)ag, Q)uit, U)ndelete, or eX)it
- XX
- XXElm : @
- XX.sp 2
- XX\" draw box, proportional Roman font back, display end
- XX.eb
- XX.DE
- XX.P 0
- XXThere are a number of things to notice about this screen;
- XX.BL 4
- XX.LI
- XXFirst off, it's quite possible that on your screen the current message will
- XXbe indicated by an inverse bar rather than an arrow.
- XXDon't worry about it - it's just harder to have an inverse
- XXbar in a document than an arrow!
- XX.LI
- XXThe top line always displays the current mail file,
- XXthe number of messages in the file, and the current
- XX.B Elm
- XXversion number.
- XX.LI
- XXThe arrow (``->'') (or bar) always points to the current message.
- XX.LI
- XXThe first few characters on each line can indicate the following:
- XX.VL 6 5
- XX.LI "U"
- XX- an \fIU\fRrgent message
- XX.LI "N"
- XX- a \fIN\fRew message since you last read mail
- XX.LI "E"
- XX- an \fIE\fRxpired message (not implemented)
- XX.LI "A"
- XX- an \fIA\fRction is associated with the message
- XX.LI "D"
- XX- the message is marked for \fID\fReletion
- XX.LI "+"
- XX- the message is \fITagged\fR.
- XX.LE
- XX.LI
- XXContinuing from left to right, the next field is the message
- XXnumber. For the most part you can ignore these unless you want
- XXto quickly move to a specific message (as we'll see later)
- XX.LI
- XXThe date associated with each message is the date the person
- XX.I sent
- XXthe message.
- XX.LI
- XXThe next field displayed indicates who the message is from.
- XX\fBElm\fR will try to display the \fIname\fR of the person who
- XXsent the message, rather than the their return address/login.
- XXSome systems don't generate the correct headers, though, hence
- XXmessages like number 11, where it's
- XXthe return address of the sender...
- XX.LI
- XXThe number in parentheses is the number of lines in the message.
- XX.LI
- XXThe final field is the (optional) subject of the message. Note
- XXthat message 3 has no subject.
- XX.LI
- XXA maximum of twelve messages are displayed at one time*.
- XX.FS *
- XXOn terminals with greater than 25 lines, more messages will be
- XXdisplayed automatically.
- XX.FE
- XXFurther into
- XXthe document we'll learn how to change 'pages' in the mailbox.
- XX.LI
- XXThe three line mini-menu will always
- XXindicate what commands are available at
- XXthe current moment.
- XX.LI
- XXFinally, the '@' character indicates where the cursor would be, awaiting
- XXyour input.
- XX.LE
- XX.P 0
- XXThe typical action at this point is to use the
- XX.I <return>
- XXkey to read the current message. This particular option actually isn't
- XXnoted in the mini-menu, but choosing the '?=help' option will
- XXinform you of a number of choices other than those in the
- XXbasic menu!
- XX.P 0
- XXPressing this key will clear the screen and display the
- XXmessage using the local pager
- XX(see \fIpager\fR in the \fI.elmrc\fR file).
- XX.P 0
- XXWhile reading is perhaps the most fundamental function that the
- XX.B Elm
- XXprogram performs, there are a number of other options available,
- XXnamely;
- XX\" ensure we get a reasonable chunk of this table on the page...
- XX.ne 10
- XX.sp
- XX.VL 25 0 1
- XX.LI "Command"
- XXAction
- XX.LE
- XX.sp
- XX.VL 22 3 1
- XX.LI "|"
- XXPipe current message or tagged messages to specified system command.
- XX.LI "!"
- XXShell escape.
- XX.LI "?"
- XXHelp mode - any key pressed will be explained.
- XX.LI "+, <space>,"
- XX.LI " or <NEXT>"
- XXNext page of headers
- XX.LI "-, or <PREV>"
- XXPrevious page of headers
- XX.LI "=, or <HOME>"
- XXSet current message to 1
- XX.LI "*, or "
- XX.LI " <SHIFT>-<HOME>"
- XXSet current to last message.
- XX.LI "<n>"
- XXSet current message to number n.
- XX.LI "/"
- XXSearch for pattern in subject/from lines.
- XX.LI "//"
- XXSearch for pattern in entire mailbox.
- XX.LI "<"
- XXScan message for calendar entries*
- XX.FS *
- XXSome sites might opt not to have this feature
- XXavailable.
- XX.FE
- XX.LI ">"
- XXA synonym for `s' - \fIsave\fR message or messages.
- XX.sp
- XX.LI "a"
- XXAlias, change to 'alias' mode
- XX.LI "b"
- XXBounce - remail message**
- XX.LI "c"
- XXChange to new mail file
- XX.LI "d"
- XXDelete current message
- XX.LI "<control>-D"
- XXDelete all messsages matching specified pattern
- XX.LI "e"
- XXEdit mailbox file, resyncing upon reentry.
- XX.LI "f"
- XXForward message to specified user**
- XX.FS **
- XXThe difference between \fIForward\fR and \fIBounce\fR is rather
- XXsubtle -- a forwarded message is ``from'' you, with the
- XXoriginal message included, whereas a bounced message
- XXis still from the original sender.
- XX.FE
- XX.LI "g"
- XXGroup reply - reply to everyone who received the current message
- XX.LI "h"
- XXDisplay message + headers
- XX.LI "j"
- XXIncrement current message by one
- XX.LI "k"
- XXDecrement current message by one
- XX.LI "m"
- XXMail to arbitrary user(s)
- XX.LI "n or <return>"
- XXNext message (Read current, then increment)
- XX.LI "o"
- XXAlter current system options.
- XX.LI "p"
- XXPrint current message or tagged messages.
- XX.LI "r"
- XXReply to the author of current message
- XX.LI "s"
- XXSave current message or tagged messages to file
- XX.LI "t"
- XXTag current message.
- XX.LI "<control>-T"
- XXTag all messages matching specified pattern.
- XX.LI "q"
- XXQuit - mail deleted, saved in mbox or left.
- XX.LI "u"
- XXUndelete current message
- XX.LI "x"
- XXExit - don't record as read, don't save...
- XX.sp
- XX.LI "^L"
- XXRewrite screen.
- XX.LI "^M (<return>)"
- XXRead current message
- XX.LI "^Q, DEL"
- XXExit - don't record as read, don't save...
- XX.LE
- XX.sp
- XX.P 0
- XXThat are all the commands available at the main level of the
- XX.B Elm
- XXprogram! Easy to remember, right?
- XX.sp 2
- XX\" again, make sure we start on a new page please
- XX.ne 10
- XX.P 0
- XXAs an example, let's enter a series of commands and indicate
- XXwhat the display would be after each one;
- XX.sp
- XX.P 0
- XXFirst off, let's go to the next page of mail with `\fI+\fR';
- XX.DS CB
- XX.mk a)
- XX.ce
- XXMailbox is '/usr/mail/mymail' with 15 messages. [Version 1.1]
-
- XX.TS
- XXr c r l l l l.
- XX -> N 13 Apr 3 Jack (17) Wanna buy some albums cheap?
- XX N 14 Apr 5 Jack (8) Cancel the previous offer!
- XX N 15 Apr 5 sdcsvax!dx (420) Moving day (long)
- XX.TE
- XX
- XX
- XX
- XX
- XX
- XX
- XX
- XX
- XX
-
- XX.ce 3
- XX|=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
- XXA)lias, C)hange mailbox, D)elete, E)dit, F)orward, G)roup reply, M)ail
- XXN)ext, O)ptions, P)rint, R)eply, S)ave, T)ag, Q)uit, U)ndelete, or eX)it
- XX
- XXElm : @
- XX.sp 2
- XX.eb
- XX.DE
- XX.P 0
- XXLet's read the new current message, 13, by typing <\fIreturn\fR>.
- XX.DS CB
- XX.mk a)
- XX.tl 'Message #13 from Jack''Mailed April 3, 1985 at 8:45 pm'
-
- XXHey Dave! I've got some old AC/DC and KISS albums, and as I know
- XXyou are a collector, do you want to buy them off of me before
- XXI make ashtrays out of them (or frisbees...)?
-
- XX Humourously,
- XX Jack
-
-
-
-
-
-
-
-
- XXMore: @
- XX.eb
- XX.DE
- XX.P 0
- XXNeedless to say, we can't let this message go by without replying!
- XXSo let's press <\fIreturn\fR> to return to the main menu,
- XXthen use the
- XX.I "reply"
- XXcommand to respond.
- XX.P 0
- XXAfter pressing the `\fIr\fR' key, the program asks if a copy of the
- XXmessage is desired (the character under the cursor indicates the
- XXdefault if <return> is pressed. In this case, the default is 'no');
- XX.sp
- XX.nf
- XX copy message? (y/n) @
- XX.fi
- XX.P 0
- XXWe choose to answer no, so press the `\fIn\fR' key. Next
- XX.B Elm
- XXverifies that the subject is okay;
- XX.sp
- XX.nf
- XX Subject: Re: Wanna buy some albums cheap?@
- XX.fi
- XX.sp
- XXTyping anything other than <return> will allow us
- XXto change the subject to something more appropriate.
- XXWe decide, however, to leave it be and press <\fIreturn\fR> again.
- XX.sp
- XXFinally, we're asked if we want to send copies of this
- XXmessage to anyone. We don't, so we press <\fIreturn\fR> one
- XXmore time.
- XX.P 0
- XXThe program then puts us
- XXin the
- XX.I vi
- XXeditor with a newly created file.
- XX.P 0
- XXAfter having entered a suitable reply, and left the editor,
- XXthe
- XX.B Elm
- XXsystem then verifies that we really want to send the message with;
- XX.sp
- XX Are you sure you want to send this message? (y/n) @
- XX.sp
- XXTo which the response is `\fIy\fR' for 'yes'. It then sends the message off
- XXto Jack, who will receive it hopefully quite soon (or at least
- XXbefore he makes ashtrays out of the albums!) (we'll ignore the
- XXnext message, which seems to be relevent, because these little
- XXdisplays are eating up space in this document anyway!!)
- XX.sp
- XX.P 0
- XXMessage 13 is still the current message,
- XXso, now let's save it and the one after it from Jack, message 14,
- XXby \fItagging\fR them both. We press `\fIt\fR' for \fItag\fR, which
- XXputs the '+' tag indicator on this message, move to the next
- XXmessage with the `\fIj\fR' key, then press `\fIs\fR' for \fIsave\fR*
- XX.FS *
- XXAnother subtle note: operations that work with tagged messages also
- XXalways work with the current message, so we don't need to actually
- XX\fItag\fR message 14.
- XX.FE
- XXThis prompts for the file to save to;
- XX.nf
-
- XX Save messages to: @
-
- XX.fi
- XXto which we answer \fIjack\fR. The two messages are then saved to
- XXthe specified file, marked for deletion, and the \fItags\fR are
- XXremoved from them.
- XX.P 0
- XXThe screen is now;
- XX.DS CB
- XX.mk a)
- XX.ce
- XXMailbox is '/usr/mail/mymail' with 15 messages. [Version 1.1]
- XX.nf
-
- XX.TS
- XXr c r l l l l.
- XX -> \ D 13 Apr 3 Jack (17) Wanna buy some albums cheap?
- XX \ D 14 Apr 5 Jack (8) Cancel the previous offer!
- XX N 15 Apr 5 sdcsvax!dx (420) Moving day (long)
- XX.TE
- XX.sp 10
- XX.ce 3
- XX|=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
- XXA)lias, C)hange mailbox, D)elete, E)dit, F)orward, G)roup reply, M)ail,
- XXN)ext, O)ptions, P)rint, R)eply, S)ave, T)ag, Q)uit, U)ndelete, or eX)it
- XX
- XXElm : @
- XX.sp 2
- XX.eb
- XX.DE
- XX.P 0
- XXNow lets go back to the first page of messages by typing '\fI=\fR';
- XX.DS CB
- XX.mk a)
- XX.ce
- XXMailbox is '/usr/mail/mymail' with 15 messages. [Version 1.1]
- XX.nf
-
- XX.TS
- XXr c r l l l l.
- XX -> 1 Apr 3 rob (24) Doing anything tonight?
- XX 2 Apr 5 Joe (154) bug in gammon game
- XX 3 Apr 5 root (13)
- XX 4 Apr 6 root (7) (continuation of previous message)
- XX U 5 Apr 8 decvax!mouse (68) Re: net.music article decvax:495
- XX 6 Apr 13 John Jacobs (194) How can you hate RUSH?
- XX 7 Apr 15 kevin (27) More software requests
- XX N 8 Apr 18 games (26) Hi there
- XX N 9 Apr 18 Don Knuth (354) Your version of TeX...
- XX N 10 Apr 23 Carl Smith (53) (More silly stuff
- XX N 11 Apr 24 jad@hpcnoe (84) Chico? Why go there?
- XX N 12 Apr 24 Larry Fenske (49) hi there...
- XX.TE
- XX.sp
- XX.ce 3
- XX|=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
- XXA)lias, C)hange mailbox, D)elete, E)dit, F)orward, G)roup reply, M)ail,
- XXN)ext, O)ptions, P)rint, R)eply, S)ave, T)ag, Q)uit, U)ndelete, or eX)it
- XX
- XXElm : @
- XX.sp 2
- XX.eb
- XX.DE
- XX.P 0
- XXGee..note five not only looks mildly interesting but it's an
- XX\fBU\fRrgent message too! So
- XXlet's read it by typing \fI5<return>\fR
- XXto make that the current message, and press <\fIreturn\fR> again
- XXto read it. After reading
- XXthe message we decide that it's utterly worthless, not even worth
- XXreplying to, let alone saving, so we'll mark it
- XXfor future deletion with the `d' \fIdelete\fR key.
- XX.P 0
- XXA `D' is put next to the message now...
- XX.P 0
- XXBefore we finish up, we suddenly remember that one of the
- XXmessages was supposed to be about how to write decent
- XXdocumentation for Unix software, so let's try to find it...
- XX.P 0
- XXFirst off, we'll move back to message one with the `\fI=\fR'
- XXkey and then use the `/' \fIpattern matching\fR command:
- XX.nf
-
- XX Elm : Pattern / = match anywhere in messages
- XX Match pattern: @
-
- XX.fi
- XXwe'll type in \fIdocument\fR (it's case insensitive) and see if the system
- XXcan find it. After a brief second or two it returns 'pattern not found.'
- XXHmm...maybe it's not either the from or the subject of
- XXany of the messages...In case that's true, let's try using
- XXthe \fImatch anywhere in message\fR command;
- XX.P 0
- XXWe again type `/' for \fIpattern matching\fR;
- XX.nf
-
- XX Elm : Pattern / = match anywhere in messages
- XX Match pattern: @
-
- XX.fi
- XXAnd now we'll use `/' again to get the match anywhere in file
- XXoption. Now the bottom of the screen looks like;
- XX.nf
-
- XX Elm : Pattern / = match anywhere in messages
- XX Match pattern (in entire mailbox): @
-
- XX.fi
- XXto which we respond \fIdocument\fR again.
- XX.P 0
- XXThe mailer then searches through each line of all the messages in
- XXthe file and moves the current message pointer to message
- XXnumber 7. A quick check reveals that this message indeed
- XXcontains the word `document', but it's not the one we want,
- XXso we're going to just get outta here!
- XX.P 0
- XXWe've had enough mail for today, so lets quit, leaving
- XXall the mail in the incoming mailbox, except those few we've
- XXmarked for deletion;
- XX.sp
- XX.I Quit
- XXprompts;
- XX.sp
- XX.nf
- XX Delete messages? (y/n) @
- XX.fi
- XX.sp
- XXto which we answer `\fIy\fR' for yes. The next prompt is then;
- XX.sp
- XX.nf
- XX Keep mail in incoming mailbox? (y/n) @
- XX.fi
- XX.sp
- XXto which we also answer yes...the program then quickly saves
- XXthe files, removing message 5, 13 and 14 as it goes along, and exits.
- XX.sp 2
- XX.P 0
- XXAs you can see, the program is pretty easy to use! In fact, it was
- XXdesigned to be used without this documentation at all, so you
- XXcould toss this right now (but don't - think of the tree that
- XXsacrificed it's precious life to allow this printout!)
- XX.sp 2
- XX.H 1 "Non-Interactive Uses of Elm"
- XX.P 1
- XXBefore we discuss the \fBElm\fR utilities, it's worth noting that
- XXthere are a couple of other ways to use the main mail
- XXsystem, namely to 'send only' and to send files (batchmail).
- XX.P
- XXTo send a message to someone without any of the associated
- XXoverhead of the main system being loaded, you can invoke the
- XXmailer with the name(s) of the people to send to. The
- XXmailer will then prompt for Subject, Copies, and then drop
- XXyou in your editor (defined in the ".elmrc" file) to compose
- XXthe message. When composition is complete, the program
- XXverifies transmission then terminates. For example;
- XX.nf
-
- XX $ \fBelm dave_taylor\fR
- XX To: hplabs!taylor
- XX Subject: \fBthis is a test\fR
- XX Copies To: \fB<return>\fR
-
- XX <invokes editor, message composed, then>
-
- XX Are you sure you want to send this? (y/n) \fBy\fR
-
- XX mail sent.
-
- XX $
-
- XX.fi
- XXNote that the user input is in \fBbold\fR face, so you can see that
- XXthe mailer verified the alias expansion too!
- XX.sp
- XX.P
- XXThe mailer also supports batch type mailing, of files and so on,
- XXby using the following starting sequence;
- XX.nf
-
- XX $ \fBelm -s "File help.c" dave_taylor < help.c\fR
-
- XX.fi
- XXwhich will read in the file and transmit it to the specified user
- XXwith the specified subject. Note that the program is intelligent
- XXenough to check to see what the standard input is from this
- XXinvocation, so a command of the form
- XX.nf
-
- XX $ \fBelm -s "file help.c" dave_taylor\fR
-
- XX.fi
- XXwould result in the following sequence since the program is reading
- XXthe "standard in" for information;
- XX.nf
-
- XX $ \fBelm -s "file help.c" dave_taylor\fR
- XX To: hplabs!taylor
- XX Subject: file help.c
-
- XX Enter your message, ending with ^D
-
- XX \fBthis is the message
- XX Please don't ask me why I used this wierd mode!
-
- XX ^D\fR
- XX <end-of-message>
-
- XX $
-
- XX.fi
- XXwhich is reasonable behaviour!! (not only that, but this is
- XXalmost exactly what \fI/bin/mail\fR does in the same situation!!)
- XX.sp 2
- XX.H 1 "The Elm Utilities"
- XX.sp
- XX.P
- XXThe \fBElm\fR program is really much more than a single
- XXprogram for reading and writing mail. It's a unified
- XXenvironment for intelligently dealing with electronic
- XXmail. As a consequence, it contains a number of other
- XXprograms to aid in the easy processing of email,
- XXincluding the following pieces;
- XX.VL 14 2
- XX.LI "checkalias"
- XXA script that contains the line \fBelm -c \$*\fR.
- XX.LI "newalias"
- XXThis program installs new aliases - please see the
- XX\fIElm Alias Users Guide\fR for more information.
- XX.LI "newmail"
- XXThis program is designed to be put into `background' and then
- XXmonitors your incoming mailbox for new mail. Whenever you
- XXreceive new mail, the program will asynchronously write to the
- XXscreen a notification, including whom the new mail is from and
- XXwhat the subjects of the messages are. The output looks like;
- XX.DS
- XXNew mail has arrived;
-
- XXFrom Jimmy Carter - Urgent matters of state
- XXFrom joe@ucbvax.arpa - Did I hear someone say PARTY??
- XX.DE
- XXThis is quite helpful for deciding in `real time' whether it's
- XXnecessary to read the mail immediately or not.
- XX.LI "wnewmail"
- XXThis is extremely similar to \fInewmail\fR but is
- XXslightly modified to run in a windowing environment.
- XXThe differences are that it stays in `foreground' (thereby
- XXtaking over a window entirely), and outputs for new
- XXmail in a slightly more succint format;
- XX.DS
- XXMail from Jimmy Carter -- Urgent matters of state
- XXMail From joe@ucbvax.arpa -- Did I hear someone say PARTY??
- XX.DE
- XX.LI "readmsg"
- XXThis handy little program can be used in two ways...first off,
- XXit can be used to easily read a specific message in the
- XXincoming mailbox, specified by ordinal number, by a string that
- XXthe message contains, or by the metacharacter `$' which
- XXrepresents the last message in the mailbox.
- XX.P 0
- XXFor example;
- XX.DS
- XX$ \fBreadmsg 4 5 9 | lpr\fR
- XX.DE
- XXwould generate a printout, \fIsans\fR headers, of the fourth,
- XXfifth and ninth messages in your mailbox.
- XX.DS
- XX$ \fBreadmsg Carter | page\fR
- XX.DE
- XXwould be a fast way to read what `ole Jimmy has to say...
- XXand
- XX.DS
- XX$ \fBreadmsg -h hear someone say\fR
- XX.DE
- XXwould list, including the message headers, the message
- XXcontaining the string ``hear someone say''.
- XX.LI "from"
- XXSimilar to the Berkeley \fIfrom\fR command, this will
- XXgive you a ``table of contents'' of either the current
- XXmailbox or a mailbox of your choice. It's useful to
- XXsee what mail is pending, or what's in a mailbox.
- XX.LI "printmail"
- XXThis is a formatting routine that knows that mailboxes look
- XXlike and inserts either formfeeds or dashed lines between
- XXmessages. It can be used in either of two ways - either
- XXa mailbox file can be \fIpiped\fR to it or it can be given
- XXa list of mailbox file names to format. The only option
- XXon the program is `-d' which indicates that you want to have
- XXa dashed line separating messages rather than a formfeed.
- XX.P 0
- XXFor example;
- XX.DS
- XX$ \fBprintmail -d | lpr\fR
- XX.DE
- XXwill print out your current incoming mailbox, separating the messages
- XXby a dashed line.
- XX.DS
- XX$ \fBreadmsg 3 4 10 | printmail | lpr\fR
- XX.DE
- XXwill print messages 3, 4, and 10 from your incoming mailbox,
- XXseparated by formfeeds (that is, each message will start on it's
- XXown page).
- XX.P 0
- XXFinally,
- XX.DS
- XX$ \fBprintmail ~/mbox ~/Mail/mail.sent | lpr\fR
- XX.DE
- XXwill print all the messages saved in \fImbox\fR and in your \fImail.sent\fR
- XXfiles. The second file will be started on a new page regardless of
- XXthe presence or absence of the `-d' dashed line option.
- XX.LI "newalias"
- XXThis is used to install new user/group aliases. Please see the
- XX\fIElm Alias Users Guide\fR for further information on this!
- XX.LI "fastmail"
- XXSometimes you want to have a batchmailing system that works as
- XXquickly as possible, not bothering with aliases or any of the
- XXother ``deluxe'' features of \fBElm\fR. An example of this would
- XXbe if you have a large mailing list for a newsletter, say.
- XXThis command, \fIfastmail\fR, is designed just for that purpose.
- XXIt avoids the lengthy startup time of \fBElm\fR while still
- XXgenerating valid \fIRFC-822\fR* mail.
- XX.FS *
- XXIf you don't know what RFC-822 is, don't worry about it!
- XX.FE
- XXPlease see the `man' entry for more information on this
- XXcommand (use \fBman fastmail\fR after installation).
- XX.LE
- XX.sp 3
- XX.H 1 "Credits and So on"
- XX.P
- XXThis mailer has been evolving over the past year or so with
- XXinvaluable comments on the interface and general mail
- XXissues from the following people;
- XXWalter Underwood, Larry Fenske, Rob Sartin,
- XXJohn Dilley (who got the SPECTRUM version checked out, too!) and Carl DierschowX.
- XX.sp
- XXFor the Berkeley implementation, lots of help came from
- XXJohn Lebovitz and Ken Stone.
- XX.sp
- XXFor the Amdahl/UTS implementation, thanks to Scott McGregor and
- XXStan Isaacs.
- XX.sp
- XXFor the Sun problems, Dave England in Lancaster (UK) turned out to be
- XX``bloody useful'', as he would no doubt say.
- XX.sp
- XXThe Pyramid version is due to the work of Steve Malone
- XXof the University of Washington.
- XX.sp
- XXA few others have been amazingly disciplined at reporting problems
- XXand (usually, much to my relief) indicating the fixes needed,
- XXnamely Guy Hillyer and Bruce Townsend.
- XX.sp
- XXThere have been many, many others, too numerous to mention, that
- XXhave inspired me with questions like "Why can't Elm..." or
- XX"Why does it ..." or "Can we make it..." too.
- XX.sp
- XXAlso helpful was the ability to have my `own' machine to
- XXclose up the many many iterative loops that this software
- XXhas gone through - since being on a big multi-user machine
- XXtends to slow it down to a standstill...
- XXFor that, I thank HP Colorado Networks Division for their
- XXsupport, and now HP Labs for the wonderful working environment
- XXthat I have here (more than any one person is safe having!)
- XX.P
- XXFinally, it's also been a very useful experience overall,
- XXconfirming my beliefs that iterative software design and
- XXkeeping a close watch on users (not to mention an open
- XXmind and mailbox!) improves a product manyfold.
- @//E*O*F doc/Users.guide//
- chmod u=rw,g=r,o=r doc/Users.guide
-
- echo x - doc/elm.1
- sed 's/^XX//' > "doc/elm.1" <<'@//E*O*F doc/elm.1//'
- XX.TH ELM 1L
- XX.ad b
- XX.SH NAME
- XXelm - an interactive mail system
- XX.SH SYNOPSIS
- XX.B elm
- XX[
- XX.B \-achkmrswz
- XX] [
- XX.B \-f
- XX<
- XX.B file
- XX>] [
- XX.B \-d
- XX<
- XX.B level
- XX>]
- XX.br
- XX.B elm
- XX[
- XX.B \-S
- XX<
- XX.B subject
- XX>] <
- XX.B "list of aliases or addresses"
- XX>
- XX.PP
- XX.SH HP-UX COMPATIBILITY
- XX.TP 10
- XXLevel:
- XXHP-UX/STANDARD
- XX.TP
- XXOrigin:
- XXHewlett-Packard
- XX.SH DESCRIPTION
- XX.I Elm\^
- XXis a new interactive mailer program that supercedes
- XX.I mail
- XXand
- XX.I mailx.
- XX.PP
- XXThere are three main ways to use the \fBelm\fR mailer;
- XXone way to use the mailer is to specify a list of addresses on the
- XXcommand line when the mailer is invoked. This will allow sending
- XXof a single message to the specified recipients with all the
- XXoptions usually available in the \fBelm\fR system itself.
- XX.PP
- XXThe second way, used most commonly when transmitting files and such,
- XXis to specify the subject of the message and the recipients using
- XXthe command line and redirect a file as standard input. For example,
- XXthe command
- XX.nf
-
- XX elm -s testing joe < test.c
-
- XX.fi
- XXwould mail a copy of the
- XXfile test.c to alias joe, with the subject "testing" indicated.
- XX.PP
- XXOtherwise, the starting options are;
- XX.TP 1.0i
- XX.B "-a"
- XXArrow - force the arrow cursor (instead of the inverse bar)
- XX.B "-c"
- XXCheckalias - expand the following aliases and return.
- XX.B "-d <level>"
- XXDebug - set specified debug level - Output to "$HOME/Elm:debug.info"
- XX.TP
- XX.B "-f <file>"
- XXFile - read file (specified) rather than the incoming mailbox.
- XX.TP
- XX.B "-h"
- XXHelp - give a list of starting options.
- XX.TP
- XX.B "?"
- XXSynonymous with the "-h" option.
- XX.TP
- XX.B "-k"
- XXKeypad - force knowledge of HP terminal keyboard, to allow
- XXthe use of the NEXT, PREV and HOME/SHIFT-HOME keys.
- XX.TP
- XX.B "-K"
- XXKeypad + softkeys - enable use of softkeys on HP terminals only.
- XX.TP
- XX.B "-m"
- XXMenu off - Use the extra lines for more message headers.
- XX.TP
- XX.B "-s"
- XXSubject - specify subject for message to mail.
- XX.TP
- XX.B "-z"
- XXZero - don't enter \fBElm\fR if no mail is pending.
- XX.SH AUTHOR
- XXDave Taylor, Hewlett-Packard Laboratories
- XX.SH SEE ALSO
- XX.I "Elm Users Guide",
- XXby Dave Taylor
- XX.sp
- XX.br
- XX.I "Elm Reference Guide"
- XXby Dave Taylor
- XX.sp
- XX.br
- XX.I "Elm Alias Users Guide"
- XXby Dave Taylor
- XX.sp
- XX.br
- XXnewalias(1L), checkalias(1L), mail(1), mailx(1), from(1L), printmail(1L)
- XX.SH FILES
- XX/usr/local/bin/elm-help.main help file
- XX.br
- XX/usr/mail/.alias_hash system alias hash table
- XX.br
- XX/usr/mail/.alias_data system alias data table
- XX.br
- XX$home/.alias_hash user alias hash table
- XX.br
- XX$home/.alias_data user alias data table
- XX.br
- XX/tmp/snd* outgoing mail edit buffer
- XX.br
- XX/tmp/mbox* temporary mailbox
- XX.br
- XX$HOME/ELM:debug.info Debug output if turned on
- XX.SH DIAGNOSTICS
- XXShould know about keyboards/softkey terminals other than HP. (If only
- XXtermcap were that powerful!)
- @//E*O*F doc/elm.1//
- chmod u=rw,g=r,o=r doc/elm.1
-
- echo x - hdrs/curses.h
- sed 's/^XX//' > "hdrs/curses.h" <<'@//E*O*F hdrs/curses.h//'
- XX/*** curses.h ***/
-
- XX/*** (C) Copyright 1986 Dave Taylor ***/
-
- XX /*** Include file for seperate compilation. ***/
-
- XX#define OFF 0
- XX#define ON 1
-
- XXint InitScreen(), /* This must be called before anything else!! */
-
- XX ClearScreen(), CleartoEOLN(),
-
- XX MoveCursor(),
- XX CursorUp(), CursorDown(),
- XX CursorLeft(), CursorRight(),
-
- XX StartBold(), EndBold(),
- XX StartUnderline(), EndUnderline(),
- XX StartHalfbright(), EndHalfbright(),
- XX StartInverse(), EndInverse(),
- XX
- XX transmit_functions(),
-
- XX Raw(), ReadCh();
-
- XXchar *return_value_of();
- @//E*O*F hdrs/curses.h//
- chmod u=rw,g=r,o=r hdrs/curses.h
-
- echo x - hdrs/defs.h
- sed 's/^XX//' > "hdrs/defs.h" <<'@//E*O*F hdrs/defs.h//'
- XX/** defs.h **/
-
- XX/** define file for ELM mail system. **/
-
- XX/** (C) Copyright 1985 Dave Taylor **/
-
- XX#include "sysdefs.h" /* system/configurable defines */
-
- XX#define VERSION "1.1" /* Version number! WHAT_STRING should agree */
-
- XX#define WHAT_STRING "@(#) Version 1.1, initial release - June 1986"
-
- XX#define SLEN 256 /* long for ensuring no overwrites... */
- XX#define SHORT 5 /* super short strings! */
- XX#define NLEN 20 /* name length for aliases */
- XX#define SHORT_SLEN 40
- XX#define STRING 100 /* reasonable string length for most.. */
- XX#define LONG_SLEN 250 /* for mail addresses from remote machines! */
- XX#define LONG_STRING 500 /* even longer string for group expansion */
- XX#define VERY_LONG_STRING 2500 /* huge string for group alias expansion */
-
- XX#define BREAK (char) 0 /* default interrupt */
- XX#define BACKSPACE (char) 8 /* backspace character */
- XX#define TAB (char) 9 /* tab character */
- XX#define RETURN (char) 13 /* carriage return char */
- XX#define LINE_FEED (char) 10 /* line feed character */
- XX#define FORMFEED (char) 12 /* form feed (^L) char */
- XX#define COMMA ',' /* comma character */
- XX#define SPACE ' ' /* space character */
- XX#define DOT '.' /* period/dot character */
- XX#define BANG '!' /* exclaimation mark! */
- XX#define AT_SIGN '@' /* at-sign character */
- XX#define PERCENT '%' /* percent sign char. */
- XX#define COLON ':' /* the colon .. */
- XX#define ESCAPE (char) 27 /* the escape */
- XX#define NO_OP_COMMAND '\0' /* no-op for timeouts */
-
- XX#define STANDARD_INPUT 0 /* file number of stdin */
-
- XX#ifndef TRUE
- XX#define TRUE 1
- XX#define FALSE 0
- XX#endif
-
- XX#define OUTGOING 0 /* defines for lock file */
- XX#define INCOMING 1 /* creation..see lock() */
-
- XX#define SH 0 /* defines for system_call */
- XX#define USER_SHELL 1 /* to work correctly! */
-
- XX#define EXECUTE_ACCESS 01 /* These five are */
- XX#define WRITE_ACCESS 02 /* for the calls */
- XX#define READ_ACCESS 04 /* to access() */
- XX#define ACCESS_EXISTS 00 /* <etc> */
- XX#define EDIT_ACCESS 06 /* (this is r+w access) */
-
- XX#define BIG_NUM 999999 /* big number! */
- XX#define BIGGER_NUM 9999999 /* bigger number! */
-
- XX#define START_ENCODE "[encode]"
- XX#define END_ENCODE "[clear]"
-
- XX#define DONT_SAVE "[no save]"
-
- XX#define alias_file ".aliases"
- XX#define group_file ".groups"
- XX#define system_file ".systems"
-
- XX/** some defines for the "status" field of the header record **/
-
- XX#define TAGGED 1 /* these are bit masks */
- XX#define DELETED 2
- XX#define EXPIRED 4
- XX#define ACTION 8
- XX#define NEW 16
- XX#define PRIORITY 32
-
- XX/** some months... **/
-
- XX#define JANUARY 0 /* months of the year */
- XX#define FEBRUARY 1
- XX#define MARCH 2
- XX#define APRIL 3
- XX#define MAY 4
- XX#define JUNE 5
- XX#define JULY 6
- XX#define AUGUST 7
- XX#define SEPTEMBER 8
- XX#define OCTOBER 9
- XX#define NOVEMBER 10
- XX#define DECEMBER 11
-
- XX#define equal(s,w) (strcmp(s,w) == 0)
- XX#define min(a,b) a < b? a : b
- XX#define ctrl(c) c - 'A' + 1 /* control character mapping */
- XX#define plural(n) n == 1 ? "" : "s"
- XX#define lastch(s) s[strlen(s)-1]
- XX#define no_ret(s) if (lastch(s) == '\n') lastch(s) = '\0'
- XX#define first_word(s,w) (strncmp(s,w, strlen(w)) == 0)
- XX#define ClearLine(n) MoveCursor(n,0); CleartoEOLN()
- XX#define whitespace(c) (c == ' ' || c == '\t')
- XX#define quote(c) (c == '"' || c == '\'')
- XX#define onoff(n) (n == 0 ? "OFF" : "ON")
-
- XX/** The next function is so certain commands can be processed from the showmsg
- XX routine without rewriting the main menu in between... **/
-
- XX#define special(c) (c == 'j' || c == 'k')
-
- XX/** and a couple for dealing with status flags... **/
-
- XX#define ison(n,mask) (n & mask)
- XX#define isoff(n,mask) (~ison(n, mask))
-
- XX#define setit(n,mask) n |= mask
- XX#define clearit(n, mask) n &= ~mask
-
- XX/** a few for the usage of function keys... **/
-
- XX#define f1 1
- XX#define f2 2
- XX#define f3 3
- XX#define f4 4
- XX#define f5 5
- XX#define f6 6
- XX#define f7 7
- XX#define f8 8
-
- XX#define MAIN 0
- XX#define ALIAS 1
- XX#define YESNO 2
- XX#define CHANGE 3
- XX#define READ 4
-
- XX/** some possible sort styles... **/
-
- XX#define REVERSE - /* for reverse sorting */
- XX#define SENT_DATE 1 /* the date message was sent */
- XX#define RECEIVED_DATE 2 /* the date message was received */
- XX#define SENDER 3 /* the name/address of sender */
- XX#define SIZE 4 /* the # of lines of the message */
- XX#define SUBJECT 5 /* the subject of the message */
- XX#define STATUS 6 /* the status (deleted, etc) */
-
- XX/* wouldn't it be nice to have variable argument macros... */
-
- XX#define dprint0(n,s) if (debug >= n) { \
- XX fprintf(debugfile, s); fflush(debugfile); }
-
- XX#define dprint1(n,s,a) if (debug >= n) { \
- XX fprintf(debugfile, s, a); fflush(debugfile); }
-
- XX#define dprint2(n,s,a,b) if (debug >= n) { \
- XX fprintf(debugfile, s, a, b); fflush(debugfile);}
-
- XX#define dprint3(n,s,a,b,c) if (debug >= n) { fprintf(debugfile, \
- XX s, a, b, c); fflush(debugfile); }
-
- XX#define dprint4(n,s,a,b,c,d) if (debug >= n) { fprintf(debugfile, \
- XX s, a, b, c, d); fflush(debugfile); }
-
- XX#define dprint5(n,s,a,b,c,d,e) if (debug >= n) { fprintf(debugfile, \
- XX s, a, b, c, d, e); fflush(debugfile); }
-
- XX#define dprint6(n,s,a,b,c,d,e,f) if (debug >= n) { fprintf(debugfile, \
- XX s, a, b, c, d, e, f); fflush(debugfile); }
-
- XX/* I guess this corrects it, though. Wretched stuff though! */
-
- XX/* some random records... */
-
- XXstruct date_rec {
- XX int month; /** this record stores a **/
- XX int day; /** specific date and **/
- XX int year; /** time... **/
- XX int hour;
- XX int minute;
- XX };
-
- XXstruct header_rec {
- XX int lines; /** # of lines in the message **/
- XX int status; /** Urgent, Deleted, Expired? **/
- XX int index_number; /** relative loc in file... **/
- XX long offset; /** offset in bytes of message **/
- XX struct date_rec received; /** when elm received here **/
- XX char from[STRING]; /** who sent the message? **/
- XX char to[STRING]; /** who it was sent to **/
- XX char dayname[8]; /** when the **/
- XX char month[10]; /** message **/
- XX char day[3]; /** was **/
- XX char year[5]; /** sent **/
- XX char time[NLEN]; /** to you! **/
- XX char subject[STRING]; /** The subject of the mail **/
- XX };
-
- XXstruct alias_rec {
- XX char name[NLEN]; /* alias name */
- XX long byte; /* offset into data file for address */
- XX };
-
- XXstruct lsys_rec {
- XX char name[NLEN]; /* name of machine connected to */
- XX struct lsys_rec *next; /* linked list pointer to next */
- XX };
-
- XXstruct addr_rec {
- XX char address[NLEN]; /* machine!user you get mail as */
- XX struct addr_rec *next; /* linked list pointer to next */
- XX };
- @//E*O*F hdrs/defs.h//
- chmod u=rw,g=r,o=r hdrs/defs.h
-
- echo x - hdrs/elm.h
- sed 's/^XX//' > "hdrs/elm.h" <<'@//E*O*F hdrs/elm.h//'
- XX/** elm.h **/
-
- XX/** header file for ELM mail system. **/
-
- XX/** (C) Copyright 1986, Dave Taylor **/
-
- XX#include <stdio.h>
- XX#include <fcntl.h>
-
- XX#include "../hdrs/curses.h"
- XX#include "../hdrs/defs.h"
-
- XX/******** static character string containing the copyright notice *******/
-
- XXstatic char copyright[] = { "(C) Copyright 1986, Dave Taylor" };
-
- XX/******** and another string for the version number and so on ********/
-
- XXstatic char ident[] = { WHAT_STRING };
-
- XX/******** global variables accessable by all pieces of the program *******/
-
- XXint current = 0; /* current message number */
- XXint header_page = 0; /* current header page */
- XXint last_header_page = -1; /* last header page */
- XXint message_count = 0; /* max message number */
- XXint headers_per_page; /* number of headers/page */
- XXchar infile[SLEN]; /* name of current mailbox */
- XXchar hostname[SLEN]; /* name of machine we're on*/
- XXchar username[SLEN]; /* return address name! */
- XXchar full_username[SLEN]; /* Full username - gecos */
- XXchar home[SLEN]; /* home directory of user */
- XXchar folders[SLEN]; /* folder home directory */
- XXchar mailbox[SLEN]; /* mailbox name if defined */
- XXchar editor[SLEN]; /* editor for outgoing mail*/
- XXchar printout[SLEN]; /* how to print messages */
- XXchar savefile[SLEN]; /* name of file to save to */
- XXchar calendar_file[SLEN]; /* name of file for clndr */
- XXchar prefixchars[SLEN]; /* prefix char(s) for msgs */
- XXchar shell[SLEN]; /* current system shell */
- XXchar pager[SLEN]; /* what pager to use */
- XXchar batch_subject[SLEN]; /* subject buffer for batchmail */
-
- XXchar backspace, /* the current backspace char */
- XX kill_line; /* the current kill-line char */
-
- XXchar up[SHORT], down[SHORT]; /* cursor control seq's */
- XXint cursor_control = FALSE; /* cursor control avail? */
-
- XXchar start_highlight[SHORT],
- XX end_highlight[SHORT]; /* stand out mode... */
-
- XXint has_highlighting = FALSE; /* highlighting available? */
-
- XXchar *weedlist[MAX_IN_WEEDLIST];
- XXint weedcount;
-
- XXint file_changed = 0; /* flag: true if infile changed */
- XXint mini_menu = 1; /* flag: menu specified? */
- XXint mbox_specified = 0; /* flag: specified alternate mbox? */
- XXint check_first = 1; /* flag: verify mail to be sent! */
- XXint auto_copy = 0; /* flag: automatically copy source? */
- XXint filter = 0; /* flag: weed out header lines? */
- XXint resolve_mode = 1; /* flag: delete saved mail? */
- XXint auto_cc = 0; /* flag: mail copy to user? */
- XXint noheader = 0; /* flag: copy + header to file? */
- XXint title_messages = 0; /* flag: title message display? */
- XXint edit_outbound = 0; /* flag: edit outbound headers? */
- XXint read_aliases = 1; /* flag: read in alias files? */
- XXint hp_terminal = 0; /* flag: are we on HP term? */
- XXint hp_softkeys = 0; /* flag: are there softkeys? */
- XXint save_by_name = 0; /* flag: save mail by login name? */
- XXint notesfile = 0; /* flag: is input file from notes? */
- XXint mail_only = 0; /* flag: send mail then leave? */
- XXint check_only = 0; /* flag: check aliases then leave? */
- XXint move_when_paged = 0; /* flag: move when '+' or '-' used? */
- XXint point_to_new = 1; /* flag: start pointing at new msg? */
- XXint bounceback = 0; /* flag: bounce copy off remote? */
- XXint signature = 0; /* flag: include $home/.signature? */
- XXint always_leave = 0; /* flag: always leave msgs pending? */
- XXint always_del = 0; /* flag: always delete marked msgs? */
- XXint arrow_cursor = 0; /* flag: use "->" cursor regardless?*/
- XXint debug = 0; /* flag: default is no debug! */
-
- XX#ifdef UTS
- XX int isatube = 0; /* flag: are we on an IBM 3270? */
- XX#endif
-
- XXint sortby = REVERSE SENT_DATE; /* how to sort incoming mail... */
-
- XXlong timeout = 0L; /* timeout (secs) on main prompt */
-
- XXint mailbox_defined = 0; /** mailbox specified? **/
-
- XXint LINES=23; /** lines per screen **/
- XXint COLUMNS=80; /** columns per page **/
-
- XXint size_of_pathfd; /** size of pathfile, 0 if none **/
-
- XXFILE *mailfile; /* current mailbox file */
- XXFILE *debugfile; /* file for debug output */
- XXFILE *pathfd; /* path alias file */
- XXFILE *domainfd; /* domain file */
-
- XXlong mailfile_size; /* size of current mailfile */
-
- XXstruct header_rec header_table[MAX_HEADERS];
-
- XXstruct alias_rec user_hash_table[MAX_UALIASES];
- XXstruct alias_rec system_hash_table[MAX_SALIASES];
-
- XXstruct date_rec last_read_mail; /* last time we read mailbox */
-
- XXstruct lsys_rec *talk_to_sys; /* what machines do we talk to? */
-
- XXstruct addr_rec *alternative_addresses; /* how else do we get mail? */
-
- XXint system_files = 0; /* do we have system aliases? */
- XXint user_files = 0; /* do we have user aliases? */
-
- XXint system_data; /* fileno of system data file */
- XXint user_data; /* fileno of user data file */
-
- XXint userid; /* uid for current user */
- XXint groupid; /* groupid for current user */
- @//E*O*F hdrs/elm.h//
- chmod u=rw,g=r,o=r hdrs/elm.h
-
- echo x - hdrs/headers.h
- sed 's/^XX//' > "hdrs/headers.h" <<'@//E*O*F hdrs/headers.h//'
- XX/** headers.h **/
-
- XX/** header file for ELM mail system. **/
-
- XX/** (C) Copyright 1985, Dave Taylor **/
-
- XX#include <stdio.h>
- XX#include <fcntl.h>
-
- XX#include "curses.h"
- XX#include "defs.h"
-
- XX/******** global variables accessable by all pieces of the program *******/
-
- XXextern int current; /* current message number */
- XXextern int header_page; /* current header page */
- XXextern int last_header_page; /* last header page */
- XXextern int message_count; /* max message number */
- XXextern int headers_per_page; /* number of headers/page */
- XXextern char infile[SLEN]; /* name of current mailbox */
- XXextern char hostname[SLEN]; /* name of machine we're on*/
- XXextern char username[SLEN]; /* return address name! */
- XXextern char full_username[SLEN];/* Full username - gecos */
- XXextern char home[SLEN]; /* home directory of user */
- XXextern char folders[SLEN]; /* folder home directory */
- XXextern char mailbox[SLEN]; /* mailbox name if defined */
- XXextern char editor[SLEN]; /* default editor for mail */
- XXextern char printout[SLEN]; /* how to print messages */
- XXextern char savefile[SLEN]; /* name of file to save to */
- XXextern char calendar_file[SLEN];/* name of file for clndr */
- XXextern char prefixchars[SLEN]; /* prefix char(s) for msgs */
- XXextern char shell[SLEN]; /* default system shell */
- XXextern char pager[SLEN]; /* what pager to use... */
- XXextern char batch_subject[SLEN];/* subject buffer for batchmail */
-
- XXextern char backspace, /* the current backspace char */
- XX kill_line; /* the current kill_line char */
-
- XXextern char up[SHORT],
- XX down[SHORT]; /* cursor control seq's */
- XXextern int cursor_control; /* cursor control avail? */
-
- XXextern char start_highlight[SHORT],
- XX end_highlight[SHORT]; /* standout mode... */
-
- XXextern int has_highlighting; /* highlighting available? */
-
- XX/** the following two are for arbitrary weedout lists.. **/
-
- XXextern char *weedlist[MAX_IN_WEEDLIST];
- XXextern int weedcount; /* how many headers to check? */
-
- XXextern int file_changed; /* flag: true iff infile changed */
- XXextern int mini_menu; /* flag: display menu? */
- XXextern int mbox_specified; /* flag: specified alternate mailbox? */
- XXextern int check_first; /* flag: verify mail to be sent! */
- XXextern int auto_copy; /* flag: auto copy source into reply? */
- XXextern int filter; /* flag: weed out header lines? */
- XXextern int resolve_mode; /* flag: resolve before moving mode? */
- XXextern int auto_cc; /* flag: mail copy to yourself? */
- XXextern int noheader; /* flag: copy + header to file? */
- XXextern int title_messages; /* flag: title message display? */
- XXextern int edit_outbound; /* flag: edit outbound headers? */
- XXextern int read_aliases; /* flag: read in alias files?? */
- XXextern int hp_terminal; /* flag: are we on an hp terminal? */
- XXextern int hp_softkeys; /* flag: are there softkeys? */
- XXextern int save_by_name; /* flag: save mail by login name? */
- XXextern int notesfile; /* flag: is input file from notes? */
- XXextern int mail_only; /* flag: send mail then leave? */
- XXextern int check_only; /* flag: check aliases and leave? */
- XXextern int move_when_paged; /* flag: move when '+' or '-' used? */
- XXextern int point_to_new; /* flag: start pointing at new msgs? */
- XXextern int bounceback; /* flag: bounce copy off remote? */
- XXextern int signature; /* flag: include $home/.signature? */
- XXextern int always_leave; /* flag: always leave mail pending? */
- XXextern int always_del; /* flag: always delete marked msgs? */
- XXextern int arrow_cursor; /* flag: use "->" regardless? */
- XXextern int debug; /* flag: debugging mode on? */
-
- XX#ifdef UTS
- XXextern int isatube; /* flag: are we on an IBM 3270 tube? */
- XX#endif
-
- XXextern int sortby; /* how to sort mailboxes */
-
- XXextern long timeout; /* seconds for main level timeout */
-
- XXextern int mailbox_defined; /** specified mailbox? **/
-
- XXextern int LINES; /** lines per screen **/
- XXextern int COLUMNS; /** columns per line **/
-
- XXextern int size_of_pathfd; /** size of pathfile, 0 if none **/
-
- XXextern FILE *mailfile; /* current mailbox file */
- XXextern FILE *debugfile; /* file for debut output */
- XXextern FILE *pathfd; /* path alias file */
- XXextern FILE *domainfd; /* domains file */
-
- XXextern long mailfile_size; /* size of current mailfile */
-
- XXextern struct header_rec header_table[MAX_HEADERS];
-
- XXextern struct alias_rec user_hash_table [MAX_UALIASES];
- XXextern struct alias_rec system_hash_table[MAX_SALIASES];
-
- XXextern struct date_rec last_read_mail;
-
- XXextern struct lsys_rec *talk_to_sys; /* who do we talk to? */
-
- XXextern struct addr_rec *alternative_addresses; /* how else do we get mail? */
-
- XXextern int system_files; /* do we have system aliases? */
- XXextern int user_files; /* do we have user aliases? */
-
- XXextern int system_data; /* fileno of system data file */
- XXextern int user_data; /* fileno of user data file */
-
- XXextern int userid; /* uid for current user */
- XXextern int groupid; /* groupid for current user */
- @//E*O*F hdrs/headers.h//
- chmod u=rw,g=r,o=r hdrs/headers.h
-
- echo x - hdrs/help.h
- sed 's/^XX//' > "hdrs/help.h" <<'@//E*O*F hdrs/help.h//'
- XX case '!': s =
- XX "Escape to the Unix shell of your choice, or just to enter commands";
- XX break;
- XX case '@': s =
- XX "Debug - display a summary of the notes on the header page";
- XX break;
- XX case '|': s =
- XX "Pipe the current message or tagged messages to the command specified";
- XX break;
- XX case '#': s =
- XX "Debug - display all information known about current message";
- XX break;
- XX case '%': s =
- XX "Debug - display the computed return address of the current message";
- XX break;
- XX case '*': s = "Go to the last message in the current mailbox";
- XX break;
- XX case '-': s =
- XX "Go to the previous page of messages in the current mailbox";
- XX break;
- XX case '=': s = "Go to the first message in the current mailbox";
- XX break;
- XX case ' ': s = "Go to the next page of messages in the current mailbox";
- XX break;
- XX case '+': s = "Go to the next page of messages in the current mailbox";
- XX break;
- XX case '/': s = "Search for specified pattern in mailbox";
- XX break;
- XX case '<': s = "Scan current message for calendar entries (if enabled)";
- XX break;
- XX case '>': s =
- XX "Save current message or tagged messages to specified file";
- XX break;
- XX case '^': s =
- XX "Toggle the Delete/Undelete status of the current message";
- XX break;
- XX case 'a': s =
- XX "Enter the alias sub-menu section. Create and display aliases";
- XX break;
- XX case 'b': s =
- XX "Bounce (remail) a message to someone as if you have never seen it";
- XX break;
- XX case 'c': s =
- XX "Change mailboxes, leaving the current mailbox as if 'quitting'";
- XX break;
- XX case 'd': s = "Mark the current message for future deletion";
- XX break;
- XX case 'e': s =
- XX "Invoke the editor on the entire mailbox, resync'ing when done";
- XX break;
- XX case 'f': s =
- XX "Forward the current message to someone, return address is yours";
- XX break;
- XX case 'g': s =
- XX "Group reply not only to the sender, but to everyone who received msg";
- XX break;
- XX case 'h': s = "Display message with all Headers (ignore weedout list)";
- XX break;
- XX case 'j': s =
- XX "Go to the next message. This is the same as the DOWN arrow";
- XX break;
- XX case 'k': s =
- XX "Go to the previous message. This is the same as the UP arrow";
- XX break;
- XX case 'm': s =
- XX "Create and send mail to the specified person or persons";
- XX break;
- XX case 'n': s =
- XX "Read the current message, then move current to next messge";
- XX break;
- XX case 'o': s = "Go to the options submenu";
- XX break;
- XX case 'p': s = "Print the current message or the tagged messages";
- XX break;
- XX case 'q': s = "Quit the mailer, asking about deletion, saving, etc";
- XX break;
- XX case 'r': s =
- XX "Reply to the message. This only sends to the originator of the message";
- XX break;
- XX case 's': s =
- XX "Save current message or tagged messages to specified file";
- XX break;
- XX case 't': s =
- XX "Tag a message for further operations (or untag if tagged)";
- XX break;
- XX case 'u': s = "Undelete - remove the deletion mark on the message";
- XX break;
- XX case 'x': s = "Exit the mail system quickly";
- XX break;
- XX
- XX case '\n':
- XX case '\r': s = "Read the current message";
- XX break;
-
- XX case ctrl('L'): s = "Rewrite the screen";
- XX break;
- XX case ctrl('?'): /* DEL */
- XX case ctrl('Q'): s = "Exit the mail system quickly";
- XX break;
- XX default :
- XX
- XX /** first off, is it a digit the user entered?? **/
-
- XX if (isdigit(ch))
- XX s = "Make specified number the current message";
- @//E*O*F hdrs/help.h//
- chmod u=rw,g=rw,o=rw hdrs/help.h
-
- echo x - hdrs/sysdefs.h
- sed 's/^XX//' > "hdrs/sysdefs.h" <<'@//E*O*F hdrs/sysdefs.h//'
-
- XX/** sysdefs.h **/
-
- XX/** System level, configurable, defines for the ELM mail system. **/
-
- XX/** (C) Copyright 1986 Dave Taylor **/
-
- XX/** define the following if you think that the information in messages
- XX that have "Reply-To:" and/or "From:" fields with addresses will
- XX contain valid addressing information. If this isn't defined, the
- XX calculated return address will ALWAYS be used instead. (note that
- XX this doesn't necessarily preclude the use of G)roup replies).
-
- XX#define USE_EMBEDDED_ADDRESSES
-
- XX**/
-
- XX#define FIND_DELTA 10 /* byte region where the binary search
- XX on the path alias file is fruitless
- XX (can't be within this boundary) */
-
- XX#define MAX_HEADERS 500 /* max number of messages in one file! */
- XX#define MAX_SALIASES 503 /* number of system aliases allowed */
- XX#define MAX_UALIASES 251 /* number of user aliases allowed */
- XX#define MAX_IN_WEEDLIST 50 /* max headers to weed out */
-
- XX#define MAX_HOPS 35 /* max hops in return addr to E)veryone */
-
- XX#define MAX_ATTEMPTS 6 /* #times to attempt lock file creation */
-
- XX/** see leavembox.c to determine if this should be defined or not....The
- XX default is to NOT have it defined.
-
- XX#define REMOVE_AT_LAST
-
- XX**/
-
- XX#define DEFAULT_BATCH_SUBJECT "no subject (file transmission)"
-
- XX/** If you want to have the mailer know about valid mailboxes on the
- XX host machine (assumes no delivery agent aliases) then you should
- XX undefine this (the default is to have it defined)...
-
-
- XX#define NOCHECK_VALIDNAME
-
- XX**/
-
- XX/** If your machine doesn't have virtual memory (specifically the vfork()
- XX command) then you should define the following....
-
- XX#define NO_VM
-
- XX**/
-
- XX/** If you want the mailer to check the pathalias database BEFORE it
- XX looks to see if a specified machine is in the L.sys database (in
- XX some cases routing is preferable to direct lines) then you should
- XX define the following...
-
- XX#define LOOK_CLOSE_AFTER_SEARCH
-
- XX**/
-
- XX/** If you'd rather the program automatically used the 'uuname' command
- XX to figure out what machines it talks to (instead of trying to get
- XX it from L.sys first) then define the following...
-
- XX#define USE_UUNAME
-
- XX**/
-
- XX/** If you'd like "newmail" to automatically go into background when you
- XX start it up (instead of the "newmail &" junk with the process id output,
- XX then define the following...
-
- XX#define AUTO_BACKGROUND
-
- XX**/
-
- XX/** If you'd rather your mail transport agent (ie sendmail) put the From:
- XX line into the message, define the following...
-
-
- XX#define DONT_ADD_FROM
-
- XX**/
-
- XX/** If your machine prefers the Internet notation of user@host for the
- XX From: line and addresses, define the following...(the default is to
- XX use this rather than the USENET notation - check your pathalias file!)
-
- XX#define INTERNET_ADDRESS_FORMAT
-
- XX**/
-
- XX/** If you're on a machine that prefers UUCP to Internet addresses, then
- XX define the following (the basic change is that on a machine that
- XX receives messages of the form <path>!user@<localhost> the displayed
- XX address will be <path>!user instead of user@<localhost>.
-
- XX BOGUS_INTERNET is the address that your local system appends to
- XX messages occasionally. The algorithm is simply to REMOVE the
- XX BOGUS_INTERNET string. This is horrible. *sigh*
-
- XX#define PREFER_UUCP
- XX#define BOGUS_INTERNET "@hplabs.HP.COM"
-
- XX**/
-
- XX/** If you're running ACSNET and/or want to have your domain name
- XX attached to your hostname on outbound mail then you can define
- XX the following (default are not defined)
-
- XX#define USE_DOMAIN
- XX#define DOMAIN "<enter your domain here>"
-
- XX**/
-
- XX/** If you are going to be running the mailer with setgid mail (or
- XX something similar) you'll need to define the following to ensure
- XX that the users mailbox in the spool directory has the correct
- XX group (NOT the users group)
- XX**/
-
- XX#define SAVE_GROUP_MAILBOX_ID
-
- XX/**
- XX**/
-
- XX/** If you want a neat feature that enables scanning of the message
- XX body for entries to add to the users ".calendar" (or whatever)
- XX file, define this.
- XX**/
-
- XX#define ENABLE_CALENDAR
- XX#define dflt_calendar_file "calendar" /* in HOME directory */
-
- XX/**
- XX**/
-
- XX#define NOTES_HEADER "/***** "
- XX#define NOTES_FOOTER "/* ---------- */"
-
- XX#ifdef BSD
- XX# define system_hash_file "/usr/spool/mail/.alias_hash"
- XX# define system_data_file "/usr/spool/mail/.alias_data"
- XX#else
- XX# define system_hash_file "/usr/mail/.alias_hash"
- XX# define system_data_file "/usr/mail/.alias_data"
- XX#endif
-
- XX#define pathfile "/usr/lib/nmail.paths"
- XX#define domains "/usr/lib/domains"
-
- XX#define Lsys "/usr/lib/uucp/L.sys"
-
- XX/** where to put the output of the elm -d command... (in home dir) **/
- XX#define DEBUG "ELM:debug.info"
-
- XX#define temp_file "/tmp/snd."
- XX#define temp_mbox "/tmp/mbox."
- XX#define temp_print "/tmp/print."
- XX#define mailtime_file ".last_read_mail"
- XX#define readmsg_file ".readmsg"
- XX#define signature_file ".signature"
-
- XX#ifdef BSD
- XX# define default_editor "/usr/ucb/vi"
- XX# define mailhome "/usr/spool/mail/"
- XX# define default_pager "/usr/ucb/page"
- XX#else
- XX# define default_editor "/usr/bin/vi"
- XX# define mailhome "/usr/mail/"
- XX# define default_pager "/usr/bin/more"
- XX#endif
-
- XX#define sendmail "/usr/lib/sendmail"
- XX#define smflags "-oi"
- XX#define mailer "/bin/rmail"
- XX#define mailx "/usr/bin/mailx"
-
- XX#define cutfile "/usr/local/bin/cutfile"
-
- XX#define helphome "/usr/local/lib"
- XX#define helpfile "elm-help.main"
-
- XX#define elmrcfile "/.elmrc"
- XX#define mailheaders ".elmheaders"
- XX#define unedited_mail "emergency.mbox"
- XX#define newalias "newalias -q 1>&2 > /dev/null"
- XX#define readmsg "readmsg"
- XX#define printmail "printmail"
-
- XX#define remove "/bin/rm -f" /* how to remove a file */
- XX#define cat "/bin/cat" /* how to display files */
- XX#define uuname "uuname" /* how to get a uuname */
-
-
- XX/** -- end of file sysdefsh. -- **/
-
- @//E*O*F hdrs/sysdefs.h//
- chmod u=rw,g=rw,o=rw hdrs/sysdefs.h
-
- echo Inspecting for damage in transit...
- temp=/tmp/sharin$$; dtemp=/tmp/sharout$$
- trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
- cat > $temp <<\!!!
- 874 4393 25463 Users.guide
- 127 456 2788 elm.1
- 27 54 620 curses.h
- 209 1034 6693 defs.h
- 125 777 4889 elm.h
- 120 748 5082 headers.h
- 105 558 3466 help.h
- 201 794 5805 sysdefs.h
- 1788 8814 54806 total
- !!!
- wc doc/Users.guide doc/elm.1 hdrs/curses.h hdrs/defs.h hdrs/elm.h hdrs/headers.h hdrs/help.h hdrs/sysdefs.h | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
- if test -s $dtemp
- then echo "Ouch [diff of wc output]:" ; cat $dtemp
- else echo "No problems found."
- fi
- exit 0
-